package spms.data.dao;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
@Mapper
public interface BaseDao<T> {

    /**
     * 查询全部
     * 子类无参查询时，实现类可直接传null做参数
     * pojo对象有值时，按各值条件查询
     *
     * @param sql       自动拼接后的SQL条件，形如：name='ZhangSan' and age = 12 ...
     * @param tableName 表名
     */
    List<T> findAll(@Param(value = "sql") String sql, @Param(value = "tableName") String tableName);

    /**
     * 分页查询
     *
     * @param pageNum  当前页码
     * @param pageSize 页面大小
     */
    List<T> findPage(int pageNum, int pageSize, @Param(value = "tableName") String tableName);

    /**
     * 更新数据
     *
     * @param t
     */
    int update(T t);

    /**
     * 统计数据量
     * 子类无参查询时，实现类可直接传null做参数
     *
     * @param tableName 表名
     */
    Integer count(@Param(value = "tableName") String tableName);

    int add(T t);
}
